home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SGI Hot Mix 17
/
Hot Mix 17.iso
/
HM17_SGI
/
research
/
lib
/
modifyct.pro
< prev
next >
Wrap
Text File
|
1997-07-08
|
4KB
|
128 lines
; $Id: modifyct.pro,v 1.4 1997/01/15 03:11:50 ali Exp $
;
; Copyright (c) 1982-1997, Research Systems, Inc. All rights reserved.
; Unauthorized reproduction prohibited.
PRO MODIFYCT, ITAB, NAME, R, G, B, FILE=file ;MODIFY COLOR TABLE IN FILE
;+
; NAME:
; MODIFYCT
;
; PURPOSE:
; Update the distribution color table file "colors1.tbl" or the
; user-supplied file with a new table.
;
; CATEGORY:
; Z4 - Image processing, color table manipulation.
;
; CALLING SEQUENCE:
; MODIFYCT, Itab, Name, R, G, B
;
; INPUTS:
; Itab: The table to be updated, numbered from 0 to 255. If the
; table entry is greater than the next available location
; in the table, then the entry will be added to the table
; in the available location rather than the index specified
; by Itab. On return, Itab will contain the index for the
; location that was modified or extended. The table
; can be loaded with the IDL command: LOADCT, Itab.
;
; Name: A string up to 32 characters long that contains the name for
; the new color table.
;
; R: A 256-element vector that contains the values for the red
; color gun.
;
; G: A 256-element vector that contains the values for the green
; color gun.
;
; B: A 256-element vector that contains the values for the blue
; color gun.
;
; KEYWORD PARAMETERS:
; FILE: If this keyword is set, the file by the given name is used
; instead of the file colors1.tbl in the IDL directory. This
; allows multiple IDL users to have their own color table file.
; The file specified must be a copy of the colors1.tbl file.
; The file must exist.
;
; OUTPUTS:
; Itab: The index of the entry which was updated, 0 to 255. This
; may be different from the input value of Itab if the
; input value was greater than the next available location
; in the table. If this was the case the entry was added to
; the table in the next available location instead of leaving
; a gap in the table.
;
; COMMON BLOCKS:
; None.
;
; SIDE EFFECTS:
; The distribution file "colors.tbl1" or the user-supplied file is
; modified with the new table.
;
; PROCEDURE:
; Straightforward.
;
; MODIFICATION HISTORY:
; Aug, 1982, DMS, Written.
; Unix version, 1987, DMS.
; ACY, 9/92, Update for new color table structure, Add FILE keyword.
; Allow extending table.
; WSO, 1/95, Updated for new directory structure
;
;-
ON_ERROR,2 ;Return to caller if an error occurs
IF (ITAB LT 0)OR(ITAB GT 255) THEN message, $
'Color table number out of range.'
IF (N_ELEMENTS(file) GT 0) THEN filename = file $
ELSE filename = FILEPATH('colors1.tbl', subdir=['resource', 'colors'])
GET_LUN,IUNIT ;GET A LOGICAL UNIT
OPENU,IUNIT, filename, /BLOCK ;OPEN FILE
ntables = 0b
readu, IUNIT, ntables
if (ITAB LT ntables) then begin ; Update an existing record
AA=ASSOC(IUNIT,BYTARR(32,ntables), ntables*768L+1) ;UPDATE NAME RECORD.
a = aa[0]
a[*,ITAB] = 32B ;blank out old name
a[0:strlen(name)-1,ITAB] = byte(name)
aa[0]=a ;Write names out
AA=ASSOC(IUNIT,BYTARR(256),1) ;UPDATE VECTORS. SKIP PAST COUNT
AA[ITAB*3] = BYTE(R) ;PUT IN RED. GUARANTEE BYTE
AA[ITAB*3+1] = BYTE(G) ;GREEN IN 2ND BLOCK
AA[ITAB*3+2] = BYTE(B) ;BLUE IN 3RD BLOCK
endif else begin ; Add a new record at the end of table
ITAB = ntables
; Add new vectors. First, read names, then insert vectors
AA=ASSOC(IUNIT,BYTARR(32,ntables), ntables*768L+1) ;UPDATE NAME RECORD.
a = aa[0]
; Skip past old vectors
AA=ASSOC(IUNIT,BYTARR(256),ntables*768L+1) ;UPDATE VECTORS
AA[0] = BYTE(R) ;PUT IN RED. GUARANTEE BYTE
AA[1] = BYTE(G) ;GREEN IN 2ND BLOCK
AA[2] = BYTE(B) ;BLUE IN 3RD BLOCK
; Skip past new vector to put in names
AA=ASSOC(IUNIT,BYTARR(32,ntables+1), (ntables+1)*768L+1)
; Add new name to end
temp=bytarr(32)+32B
temp[0:strlen(name)-1]=byte(name)
allnames=bytarr(32,ntables+1)
allnames[*,0:ntables-1] = a
allnames[*,ntables]=temp
AA[0] = allnames ; write the names out
; Update count
AA=ASSOC(IUNIT,BYTARR(1))
AA[0] = [ntables+1B]
endelse
FREE_LUN,IUNIT
RETURN
END